import os
from celery import Celery
import logging
import sys

os.environ.setdefault('DJANGO_SETTINGS_MODULE','AiChat.settings')
# 告诉 Python 进程的环境变量中 Django 配置模块的位置，以便 Django 各个组件知道去哪加载配置。
# 'django_chat.settings' 就像是地址（告诉程序去哪里找配置文件）
# os.environ 是 Python 中操作环境变量的字典接口，类似系统里的环境变量存储。
# setdefault 是字典的方法：如果 'DJANGO_SETTINGS_MODULE' 这个键已经存在，
# 就返回它的值；如果不存在，则设置成 'django_chat.settings' 并返回这个值。
app = Celery('Aichat')
app.config_from_object('django.conf:settings', namespace='CELERY')
# config_from_object() 是 Celery 提供的一个加载配置的方法，可以从 Python 对象（模块、类、字典）里读取配置。
# 这个字符串 'django.conf:settings' 是一种“点路径”或“Dotted Path”格式，格式是 模块名:变量名。
# django.conf 是模块
# settings 是该模块里的变量（这里是 Django 的配置对象）
# 动态导入模块：import django.conf
# 从模块中取出 settings 对象
# 读取这个对象里的所有大写变量作为配置
app.autodiscover_tasks()
# 这个实现离不开环境变量的设置
# 通过 设置里的INSTALLED_APPS，尝试导入各 app 下的 tasks.py 文件。
@app.on_after_configure.connect
def setup_loggers(sender, **kwargs):
    logger = logging.getLogger('celery')
    logger.addHandler(logging.StreamHandler(sys.stdout))
    logger.setLevel(logging.INFO)

@app.task(bind=True)
def debug_task(self):
    print(f'Request: {self.request!r}')